//
//  ILAuthSecurity.h
//  IMILabKit
//
//  Created by OrrHsiao on 2022/3/15.
//

#import <Foundation/Foundation.h>

typedef void(^ILAuthSecuritySuccessBlock)(NSString * _Nullable appId, NSString * _Nullable appKey);
typedef void(^ILAuthSecurityFailureBlock)(NSError * _Nullable error);

NS_ASSUME_NONNULL_BEGIN


/**
 *  签名相关信息
 */
typedef struct{
      NSString * _Nullable appId;
      NSString * _Nullable appKey;
      NSError  *  _Nullable error;
}ILSecurityResult;

@interface ILAuthSecurity : NSObject

@property(nonatomic, copy, readonly, class)NSString * _Nullable appId;

/// 初始化创米安全图解析器
/// @param securityName 安全图片名称，传nil默认读取图片名imi_security，如：imi_security
/// @return
/// 0返回成功
/// 1 传入的securityName不能包含文件后缀,图片必须为jpg格式
/// 2 读取文件路径失败，一般不会遇到此错，如遇到，联系开发者
/// 3 读取安全图片失败
/// 4 获取验证信息时(initWithSign:)，检测到为执行install方法进行初始化
/// 其他 C语言报错
+ (short)install:(NSString* _Nullable)securityName;

/// @brief 获取创米安全图验证信息, 必须先调用install初始化
/// @param sign 签名,由账号+时间戳组成,示例:"18888888888+1647396354"
/// @param success 成功回调,返回appId appKey
/// @param failure 失败回调,返回error信息
+ (void)initWithSign:(nonnull NSString *)sign success:(ILAuthSecuritySuccessBlock)success failure:(ILAuthSecurityFailureBlock)failure;


///  获取创米安全图验证信息, 必须先调用install初始化
/// @param sign 签名,自定义 和云端进行协定
/// @return ILSecurityResult  成功回调,返回appId appKey 失败返回空，NSError 判断空后则认为成功
+ (NSDictionary<NSString*,NSString*> *)getSecurityWithSign:(nonnull NSString * )sign;


///生成随机字符串一般用于加盐
+ (NSString *)getRandStringWithLength:(int)length;

/// 默认的安全图片名称
+ (NSString *)defaultSecurityImageName;
 

NS_ASSUME_NONNULL_END

@end

